package edu.hunau.cxb19.oop.class24;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

/**
 *
 * @author hb
 *
 *         2020-03-27 16:28:44
 */
public class TraderTest {

	public void initDatas() {
		Trader haoren = new Trader("haoren", "长沙");
		Trader lucy = new Trader("lucy", "浏阳");
		Trader batman = new Trader("batman", "长沙");
		Trader lily = new Trader("lily", "长沙");

		List<Transaction> transactions = Arrays.asList(new Transaction(lily, 2011, 300),
				new Transaction(haoren, 2012, 1000), new Transaction(haoren, 2011, 400),
				new Transaction(lucy, 2012, 710), new Transaction(lucy, 2012, 700), new Transaction(batman, 2012, 950));

//		   找出2011年发生的所有的交易，并按交易排序（低到高）
//		List<Transaction> result = transactions.stream().filter(t -> t.getYear() == 2011).sorted((t1, t2) -> t1.getValue() - t2.getValue())
//				.collect(Collectors.toList());
		List<Transaction> result = transactions.stream().filter(t -> t.getYear() == 2011)
				.sorted(Comparator.comparing(Transaction::getValue)).collect(Collectors.toList());
//		  交易员都在哪些城市工作
//		List<String> citys = transactions.stream().map(t -> t.getTrader().getCity()).distinct()
//				.collect(Collectors.toList());
		Set<String> citys = transactions.stream().map(t -> t.getTrader().getCity()).collect(Collectors.toSet());
//		  找出所有来自长沙的交易员，并按姓名排序
		List<Trader> traders = transactions.stream().map(Transaction::getTrader).filter(t -> t.getCity().equals("长沙"))
				.sorted(Comparator.comparing(Trader::getName)).collect(Collectors.toList());
//		  返回所有交易员的姓名，按字母顺序排序
//		String names = transactions.stream().map(t->t.getTrader().getName()).distinct()
//		.sorted()  //使用字符串默认的排序规则
//		.reduce("",(n1,n2)->n1+n2);
		String names = transactions.stream().map(t -> t.getTrader().getName()).distinct().sorted() // 使用字符串默认的排序规则
				.collect(Collectors.joining());// joining内部会使用StringBuilder进行拼装
//		  有没有交易员在湘潭工作
		boolean anyMatch = transactions.stream().anyMatch(t -> t.getTrader().getCity().equals("湘潭"));
//		  打印在长沙交易员的所有交易额
		transactions.stream().filter(t -> "长沙".equals(t.getTrader().getCity())).map(Transaction::getValue)
				.forEach(System.out::println);
//		  所有交易中，最高的交易额是多少
		 Optional<Integer> optional = transactions.stream().map(Transaction::getValue).reduce(Integer::max);
//		  最少的交易额
		 Optional<Transaction> minOptional = transactions.stream().min(Comparator.comparing(Transaction::getValue));

	}
}
